[build] pack .NET .nupkg files in parallel - #7648
Closed
jonathanpeppers wants to merge 1 commit into
Closed
Conversation
Previously, we were calling `dotnet pack` serially for many projects,
such as:
<Exec Command=""$(DotNetPreviewTool)" pack ... "$(MSBuildThisFileDirectory)Microsoft.Android.Ref.proj"" />
This ends up taking a while:
Target CreateAllPacks 52.127s
Task Exec 3.712s
Task Exec 3.569s
Task Exec 3.432s
Task Exec 3.434s
Task Exec 24.741s
Task Exec 7.257s
Task Exec 2.507s
Task Exec 3.468s
Instead, we can create a `@(_ProjectsToPack)` item group, set
`%(AdditionalProperties)`, and call the `<MSBuild/>` task:
<MSBuild
Projects="@(_ProjectsToPack)"
Targets="Pack"
Properties="@(_GlobalProperties)"
BuildInParallel="$(BuildInParallel)"
/>
This is faster because:
* We don't shell out to a new `dotnet.exe` each time.
* `<MSBuild/>` task knows how to run in parallel, managing multiple
MSBuild nodes.
This also has the benefit of including these `dotnet pack` commands in
the `.binlog`. Previously, we would just have console output for them.
After these changes, I instead see:
Target CreateAllPacks 5.857s
Task MSBuild 5.857s
From my numbers before, I am unsure why one of the `dotnet pack`
commands took ~24 seconds. But I believe this change should reduce the
time to the *slowest` individual `dotnet pack` now.
It could save up to ~1 min of time in the `CreateAllPacks` target.
jonathanpeppers
force-pushed
the
PackInParallel
branch
from
January 4, 2023 03:01
3238abd to
bcd62ed
Compare
Member
Author
|
I might come back to this later, this hits: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Previously, we were calling
dotnet packserially for many projects, such as:This ends up taking a while:
Instead, we can create a
@(_ProjectsToPack)item group, set%(AdditionalProperties), and call the<MSBuild/>task:This is faster because:
We don't shell out to a new
dotnet.exeeach time.<MSBuild/>task knows how to run in parallel, managing multiple MSBuild nodes.This also has the benefit of including these
dotnet packcommands in the.binlog. Previously, we would just have console output for them.After these changes, I instead see:
From my numbers before, I am unsure why one of the
dotnet packcommands took ~24 seconds. But I believe this change should reduce the time to the slowest individualdotnet packnow.It could save up to ~1 min of time in the
CreateAllPackstarget.